/**
 * 全局filter
 */
import Vue from 'vue'
import { formatDiffTime } from '@/utils/index'

/**
  * 分割Tags字符串
  * @param {String}  tags 以空格分开的字符串转化成数组
  * @param {String} splitKey 分割方式
*/
Vue.filter('splitTags', (tags = '', splitKey = ' ') => {
  if (tags) {
    return tags.trim().split(splitKey).filter(tag => tag !== '')
  }
  return []
})

/**
 * 统计数量,超过最大值显示最大值+
 * @param {Number} val 值
 * @param {Number} max 最大值
 */
Vue.filter('countFilter', (val, max = 99) => {
  if (val > max) {
    return max + '+'
  }
  return val
})

/**
 * 性别boolean转文字 0：男，1： 女
 */
Vue.filter('genderText', (val) => {
  if (val) {
    return '女'
  }
  return '男'
})

/**
 * 消息列表，计算消息的日期显示规则
 * 小时:分钟
 * 昨天 （大于1天）
 * n天前 （7天内）
 * 年.月.日
 */
Vue.filter('msgTime', (time) => {
  const diff = formatDiffTime(Date.now() - new Date(time))

  if (diff.day >= 7) {
    return Vue.prototype.$u.date(time, 'yyyy.mm.dd')
  }
  if (diff.day > 1) {
    return `${ diff.day }天前`
  }
  if (diff.hour > new Date().getHours()) {
    return `昨天`
  }

  return Vue.prototype.$u.timeFormat(time, 'hh:MM')
})

/**
 * 通知时间
 */
Vue.filter('informTime', (time) => {
  const diff = formatDiffTime(Date.now() - new Date(time))

  if (diff.day === 0) {
    return Vue.prototype.$u.timeFormat(time, 'hh:MM')
  }

  return Vue.prototype.$u.timeFormat(time, 'yyyy.mm.dd hh:MM')
})

/**
 * 长数量转文字
 * < 10000 : 直接显示
 * > 10000 : n.mm万，不足100的舍去
 */
Vue.filter('numToText', (num) => {
  if (num < 10000) {
    return num
  }
  const first = Math.floor(num / 10000)

  num -= first * 10000
  const second = Math.floor(num / 1000)

  num -= second * 1000
  const third = Math.floor(num / 100)

  return `${ first }.${ second }${ third }万`
})
